// 该文件与tx_p2联合实现点对点聊天

#include <stdio.h>
#include <unistd.h>
#include <error.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

#define MAXLINE 1024

int main(int argc, char* argv[])
{
    //先在外面创建有名管道 FIFO
    //一切皆文件
    //打开管道 open的返回值为文件描述符
    int fd1 = open("p1", O_WRONLY);
    if(fd1 == -1)
    {
        //返回-1 打开文件失败
        error(1, errno, "open f1 fail");
    }
    int fd2 = open("p2", O_RDONLY);
    if(fd2 == -1)
    {
        error(1, errno, "open f2 fail");
    }

    printf("开始聊天：\n");

    //定义数组，用来存储输出输入信息
    char sndline[MAXLINE];
    char recline[MAXLINE];

    while(1)
    {
        //在该文件中 fifo1 为写 ，2 为读
        //假设先写
        fgets(sndline, MAXLINE, stdin);         //阻塞点1 stdin中没有数据就会阻塞直到读到数据
        write(fd1, sndline, strlen(sndline)+1); //因为没有初始化所以多传入一个字节用于截断脏数据

        read(fd2, recline, MAXLINE);            //阻塞点2 读到数据才会返回
        printf("massage from p2: %s", recline);
    }
    return 0;
}